home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / ae / code / ax3.00 / logon.c < prev    next >
Encoding:
C/C++ Source or Header  |  1980-01-03  |  19.3 KB  |  799 lines

  1. #include "bbs.h"
  2.  
  3. extern char *MyVerStr;
  4. extern ULONG ConfBaseLine;
  5. extern int ValidUser;
  6. extern char ReservedName[40];
  7. extern UBYTE NodeWork[],WhichHist,NumHistItems;
  8. extern int CustomCommand(char *str1, char *str2,int Private);
  9. char LSTR[300];
  10. extern char lang[];
  11. extern char langtitle[];
  12. void CallerIDLog(int opt);
  13. char mybbstitle[50];
  14. extern char SystemPrompt[80];
  15. extern int Stealth;
  16. UWORD CheckUserOnLine(struct User *user,UWORD check)
  17. {
  18.  struct User *tuser;
  19.  BPTR fh,lock;
  20.  char temp[10];
  21.  UWORD error=0,stat,loop;
  22.  
  23.  if(check) {
  24.         if(tuser=(struct User *)AllocMem(sizeof(struct User),MEMF_ANY|MEMF_CLEAR))    {
  25.             loop=0;
  26.             error=1;
  27.             do {
  28.                 if(loop==Cmds->AcLvl[LVL_NODE_NUMBER])    loop++;
  29.  
  30.                 sprintf(GSTR1,"%snode%ld",Cmds->BBSLoc,loop);
  31.                 if(lock=Lock(GSTR1,ACCESS_READ)) {
  32.                     UnLock(lock);
  33.                     sprintf(GSTR1,"%snode%ld.user",NodeWork,loop);
  34.                     if(fh=Open(GSTR1,MODE_OLDFILE)) {
  35.                         if(stat=Read(fh,(void *)tuser,sizeof(struct User))) {
  36.                             if(StringCompare(tuser->Name,user->Name)==SUCCESS) {
  37.                                 error=0;
  38.                                 lock=NULL;
  39.                             }
  40.                         }
  41.                         Close(fh);
  42.                     }
  43.                 }
  44.                 loop++;
  45.             } while(lock!=NULL);
  46.             FreeMem(tuser,sizeof(struct User));
  47.         } else    AEPutStr("Can't allocate memory for user test\r\n");
  48.     } else    error=1;
  49.  
  50.  if(error) {
  51.         error=0;
  52.  
  53.      /* Write the current user info to Node%d.user */
  54.  
  55.         sprintf(GSTR1,"%snode%ld.user",NodeWork,Cmds->AcLvl[LVL_NODE_NUMBER]);
  56.         if(fh=Open(GSTR1,MODE_NEWFILE))
  57.         {
  58.         strcpy(temp,user->Pass);
  59.         strcpy(user->Pass,"ENCRYPTED");
  60.         if(stat=Write(fh,(void *)user,sizeof(struct User))) error=1;
  61.         }
  62.         Close(fh);
  63.  
  64.           strcpy(user->Pass,temp);
  65.  
  66.      /* Write current userkeys information */
  67.  
  68.         sprintf(GSTR1,"%snode%ld.userkeys",NodeWork,Cmds->AcLvl[LVL_NODE_NUMBER]); /* file name */
  69.         if(fh=Open(GSTR1,MODE_NEWFILE))
  70.         {
  71.         if(stat=Write(fh,(void *)&User_keys,sizeof(struct UserKeys))) error=1;
  72.         }
  73.     Close(fh);
  74.     }
  75.  
  76.  return(error);
  77. }
  78.  
  79. void CallersLogDivider(void)
  80. {
  81.  CallersLog("**************************************************************\n");
  82.  
  83. }
  84.  
  85. extern char ID_TIME[];
  86. extern char ID_DATE[];
  87. extern char ID_NAME[];
  88. extern char ID_NMBR[];
  89.  
  90. void CallerIDLog(int opt)
  91. {
  92.   FILE *fi;
  93.   if((Sopt->Toggles[15] || Sopt->Toggles[16]) && opt)
  94.   {
  95.      sprintf(GSTR1,"%sNode%d/CallerIDlog",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  96.      fi=fopen(GSTR1,"a");
  97.      fprintf(fi,"**************************************************************\n");
  98.  
  99.      if(Sopt->Toggles[16])
  100.      fprintf(fi,"\t(%s - %s [%16.16s / %s]) \n",ID_DATE,ID_TIME,ID_NMBR,ID_NAME);
  101.      else
  102.      fprintf(fi,"\t(%s - %s [%16.16s])\n",ID_DATE,ID_TIME,ID_NMBR);
  103.      fclose(fi);
  104.      return;
  105.   }
  106.   if(Sopt->Toggles[15] || Sopt->Toggles[16])
  107.   {
  108.          sprintf(GSTR1,"%sNode%d/CallerIDlog",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  109.      fi=fopen(GSTR1,"a");
  110.  
  111.      fprintf(fi,"\t%s\n",User.Name);
  112.      fclose(fi);
  113.    }
  114. }    
  115. void UDLog(char *stringout)
  116. {
  117.  FILE *GFP1;
  118.  if(!(GET_BIT(ACS_DO_UD_LOG)))    return;
  119.  
  120.  sprintf(LSTR,"%sNode%u/UDLog",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  121.  GFP1=fopen(LSTR,"r");
  122.  if(GFP1==NULL)    GFP1=fopen(LSTR,"w");
  123.  else {
  124.         fclose(GFP1);
  125.         GFP1=fopen(LSTR,"a");
  126.     }
  127.  
  128.  if(GFP1) {
  129.         fprintf(GFP1,stringout);
  130.         fclose(GFP1);
  131.     }
  132. }
  133.  
  134. void UDLogDivider(void)
  135. {
  136.  UDLog("**************************************************************\n");
  137. }
  138.  
  139. void DisplayUserToCallersLog(int Udonly)
  140. {
  141.  extern struct myst my_struct;
  142.  
  143.  if(!Udonly)     { (void)CallersLogDivider(); 
  144.                  CallerIDLog(0); }
  145.  else            (void)UDLogDivider();
  146.  
  147.  Time_system=time(NULL);
  148.  
  149.  sprintf(GSTR2,"%s",ctime(&Time_system));
  150.  (void)Convert_CTime_To_Date(GSTR2,GSTR1,GSTR3);
  151.  
  152.  if(User.Times_Called==0) {
  153.      my_struct.newuser = TRUE;
  154.         sprintf(GSTR2,"%s (%s) NEW [%d] %s (%s) %s\n",GSTR1,GSTR3,User.Slot_Number,User.Name,ConnectString,User.Location);
  155.     } else {
  156.         sprintf(GSTR2,"%s (%s) [%d] %s (%s) %s\n",GSTR1,GSTR3,User.Slot_Number,User.Name,ConnectString,User.Location);
  157.      my_struct.newuser = FALSE;
  158.  }
  159.  
  160.  if(!Udonly)    {
  161.      User.Times_Called +=1;
  162.      CallersLog(GSTR2);
  163.   } else
  164.      UDLog(GSTR2);
  165.  
  166. }
  167.  
  168. void LogOffLog(char *STAT)
  169. {
  170.  Time_system=time(NULL);
  171.  
  172.  sprintf(GSTR2,"%s",ctime(&Time_system));
  173.  (void)Convert_CTime_To_Date(GSTR2,GSTR1,GSTR3);
  174.  
  175.  if(STAT[0]=='N')
  176.         sprintf(GSTR2,"%s (%s) %s Off Normally\n",GSTR1,GSTR3,User.Name);
  177.  else
  178.      sprintf(GSTR2,"%s (%s) %s Off %s\n",GSTR1,GSTR3,User.Name,STAT);
  179.  
  180. (void)CallersLog(GSTR2);
  181. }
  182.  
  183. static int New_Account_Sequence(void)
  184. {
  185.   int mystat;
  186.   int command_accepted;
  187. sprintf(GSTR1,"%sACCESS/Preset.1",Cmds->BBSLoc);
  188.  
  189.     strcpy(User.Pass,"");
  190.  
  191.     User.Slot_Number=0;
  192.     User.Sec_Status=IntFromIcon(GSTR1,"PRESET.ACCESS");
  193.     User.Sec_Board=IntFromIcon(GSTR1,"PRESET.RATIO_TYPE");
  194.     User.Sec_Library=IntFromIcon(GSTR1,"PRESET.RATIO");
  195.     User.Time_Limit=IntFromIcon(GSTR1,"PRESET.TIME_LIMIT");
  196.     User.Messages_Posted=0;
  197.     User.New_User=1;
  198.     User.NewSinceDate=0;
  199.     User.Uploads=0;
  200.     User.Downloads=0;
  201.     User.ConfRJoin=IntFromIcon(GSTR1,"PRESET.CONFRJOIN");
  202.  
  203.     if(User.ConfRJoin==NULL) User.ConfRJoin=1;
  204.     User.Time_Last_On=0L;
  205.     User.Time_Used=0L;
  206.     User.Time_Total=User.Time_Limit;
  207.     User.Times_Called=0;
  208.     User.Bytes_Download=0L;
  209.     User.Bytes_Upload=0L;
  210.     User.Protocol = 'Z'; 
  211.     User.Time_Last_On=time(NULL);
  212.     User.Daily_Bytes_Limit=IntFromIcon(GSTR1,"PRESET.DAILY_BYTE_LIMIT");
  213.     GetFromIconStr(GSTR1,"PRESET.AREA",User.Conference_Access);
  214.     strcpy(User.Location," ");
  215.  
  216.     StatPrintUser(&User);
  217.  
  218.  sprintf(GSTR3,"%sGuestLogon",Sopt->NodeScreen);
  219.  if(!(GI1=ChecktoDisplay(GSTR3,GSTR2,0,1)))
  220.         UnAvailNotice(GSTR2,GSTR3);
  221.  if(User.Slot_Number==0) {
  222.      mystat=DoPause();
  223.      if(mystat<0) return(mystat);
  224.      command_accepted=JCom();              /* join */
  225.      if(command_accepted<0)   return(command_accepted);
  226.      AEPutStr("\r\n");
  227.  }
  228.  
  229.  return(0);
  230. }
  231.  
  232. void DisplayReserveNotice(void)
  233. {
  234.  sprintf(GSTR1,"\r\nNode %d is reserved right now, please try again later\r\n",Cmds->AcLvl[LVL_NODE_NUMBER]);
  235.  AEPutStr(GSTR1);
  236. }
  237.  
  238. int DoReserve(char *username)
  239. {
  240.  if(ReservedName[0]!='\0') {
  241.         if(stricmp(username,ReservedName)) {
  242.             DisplayReserveNotice();
  243.             Delay(60);
  244.             return(1);
  245.         }
  246.     }
  247.  return(0);
  248. }
  249.  
  250. static int CheckBaudCallingTime(int Online_Baud)
  251. {
  252.  
  253.  int Time,Start=0,Fin=0;
  254.  char str[70],str2[10];
  255.  char t[100],t1[20];
  256.  sprintf(t,"%sNode%d/TIMES.DEF",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  257.  
  258. if(GET_BIT(ACS_OVERRIDE_TIMES))return(1);
  259.  
  260.  strcpy(str,GetTheTime(Time_connect));
  261.  str2[0]=str[0];
  262.  str2[1]=str[1];
  263.  str2[2]=str[3];
  264.  str2[3]=str[4];
  265.  str2[4]='\0';
  266.  
  267.  Time=(int)atoi(str2);
  268.  sprintf(t1,"START.%d",Online_Baud);
  269.  Start=IntFromIcon(t,t1);
  270.  sprintf(t1,"END.%d",Online_Baud);
  271.  Fin=IntFromIcon(t,t1);
  272. if(Fin<Start)
  273.  {
  274.     if(Time>=Fin && Time<Start) return(0);
  275.     return(1);
  276.  }
  277.  if(Time>=Start) { if(Time<=Fin) return(1); return(0);}
  278. }
  279.  
  280.  
  281.  
  282. static int BaudTime(int Online_Baud)
  283. {
  284. int stat;
  285.  
  286.  stat=CheckBaudCallingTime(Online_Baud);
  287.  if(!stat) {
  288.      sprintf(GSTR1,"%sNotTime%ld",NodeStr,Online_Baud);
  289.         if(!(stat=ChecktoDisplay(GSTR1,GSTR2,0,1))) {
  290.          sprintf(GSTR1,"\r\n%ld baud is not allowed at this time.\r\n\r\n",Online_Baud);
  291.             AEPutStr(GSTR1);
  292.         }
  293.      stat=FALSE;
  294.      Delay(120L);
  295.     }
  296.  return(stat);
  297. }
  298.  
  299. /************************************************** check User logon  ****/
  300. /*** ADD IF new user, read bulletin1 rules ***/
  301. int rnd(int );
  302.  
  303. int Logon_Sequence(void)
  304. {
  305.  #define MY_CONNECTMSG  "You are Connected to"
  306.  extern struct myst my_struct;
  307.  extern BOOL QuickAllowed;
  308.  char acctfile[133], username[40];
  309.  int stat, UUCP, tries;
  310.  BPTR f, fp;
  311.  
  312.  Time_holder=0;
  313.  ValidUser=2;
  314.  AnsiColor=1;
  315. if(Cmds->SysPass[0]!='\0' && Stealth) {
  316.         
  317.         for(tries=1; tries<4; tries++) {
  318.          sprintf(GSTR3,"%sPrivate",Sopt->NodeScreen);
  319.         if(!(ChecktoDisplay(GSTR3,GSTR1,0,1)))
  320.             UnAvailNotice(GSTR1,GSTR3);
  321.               AEPutStr(SystemPrompt);
  322.             stat=LineInputConverted("",GSTR1,30,KEYBOARD_TIMEOUT);
  323.             if(stat<0) return(SLEEP_LOGOFF);
  324.  
  325.             if(Whence_The_Logon>=REMOTE_LOGON) {
  326.                 stat=CheckCarrier();
  327.                 if(stat==FALSE)            return(SLEEP_LOGOFF);
  328.             }
  329.  
  330.          stat=StringCompare(GSTR1,Cmds->SysPass);
  331.             if(stat==SUCCESS)    break;
  332.  
  333.         }
  334.  
  335.         if(tries==4) {
  336.             (void)CallersLog("System Password Failure\n");
  337.             return(FAILURE);
  338.         }
  339.        AEPutStr("\r\n");
  340.     }
  341.  
  342.  ConPutStr(" p");
  343.  
  344.  sprintf(GSTR3,"%5d",Online_Baud);
  345.  StatMessage(73,1,GSTR3);
  346.  
  347.  Delay(50L);
  348.  /* check if NoCallers File exists */
  349.  sprintf(GSTR3,"%sNoCallersAt%d",Sopt->NodeScreen,Online_Baud);
  350.  fp=Open(GSTR3,MODE_OLDFILE);
  351.  if(fp!=NULL) {
  352.         Close(fp);
  353.         MenuSend(GSTR3);
  354.         Delay(200L);
  355.         goto LogoffEnd;
  356.     }
  357.  
  358.  my_struct.sessiondbytes = 0;    /* DOwnloaded Bytes for this user, this session */
  359. strcpy(acctfile,UserDataLoc);
  360.  //sprintf(acctfile,"%sUser.Data",Cmds->BBSLoc);
  361.  
  362.  Time_system=time(NULL);
  363. //(JOE)---06-21-92
  364.  
  365.     AEPutStr(ConnectString);
  366.  
  367.     if(mybbstitle[0]!=NULL)
  368.         {
  369.         sprintf(GSTR1,"\r\n\r\nWelcome to %s, located in %s",Cmds->BBSName,mybbstitle);
  370.         } else {
  371.         sprintf(GSTR1,"\r\n\r\nWelcome to %s.",Cmds->BBSName);
  372.         }
  373.  
  374.     AEPutStr(GSTR1);
  375.     AEPutStr("\r\nRunning AmiExpress BBS - Beta Tester Version\r\n");
  376.     sprintf(GSTR1,"You are connected to Node %d at %ld baud",Cmds->AcLvl[LVL_NODE_NUMBER],Online_Baud);
  377.     AEPutStr(GSTR1);
  378.     strcpy(GSTR2,GetTheTime(Time_system));
  379.     strcpy(GSTR3,GetTheDate(Time_system));
  380.     sprintf(GSTR1,"\r\nConnection occured at %s %s.\r\n",GSTR2,GSTR3);
  381.     AEPutStr(GSTR1);
  382.     AEPutStr("\r\n");
  383.  
  384.  sprintf(GSTR1,"%sCommands/SysCmd/",Cmds->BBSLoc);
  385.  strcpy(GSTR2,"FRONTEND");
  386.  CustomCommand(GSTR1,GSTR2,1);
  387.  /*-- 11w end */
  388. QuickFlag=0;
  389.  User.Sec_Status=255;
  390.  
  391.  if(Sopt->Toggles[15] || Sopt->Toggles[16])
  392.  {
  393.     ConPutStr("\r\n >"); ConPutStr(ID_TIME); ConPutStr("\r\n");
  394.     ConPutStr(" >");                    ConPutStr(ID_DATE); ConPutStr("\r\n");
  395.     ConPutStr(" >");                    ConPutStr(ID_NMBR); ConPutStr("\r\n");
  396.     if(Sopt->Toggles[16]) { AEPutStr(" >"); ConPutStr(ID_NAME); ConPutStr("\r\n"); }
  397.     ConPutStr("\r\n");
  398.   }
  399.  sprintf(GSTR1,"%sCommands/syscmd/",Cmds->BBSLoc);
  400.  
  401.  strcpy(GSTR2,"ANSI");
  402.  if(!CustomCommand(GSTR1,GSTR2,1))
  403.  {
  404.  AEPutStr("ANSI graphics (Y/n)? ");
  405.  
  406.  
  407.  stat=LineInput("",GSTR1,10,KEYBOARD_TIMEOUT/2);
  408.  
  409.  if(stat<0)  return(SLEEP_LOGOFF);
  410.  if(Whence_The_Logon>=REMOTE_LOGON)    {
  411.         stat=CheckCarrier();
  412.         if(stat==FALSE)        return(SLEEP_LOGOFF);
  413.     }
  414.  if(GSTR1[0]=='N'||GSTR1[0]=='n') {
  415.          my_struct.AnsiColor=0;
  416.          AnsiColor=0;
  417.  }
  418.  
  419. QuickFlag=0;
  420. if((GSTR1[2]=='Q'||GSTR1[2]=='q') && QuickAllowed)
  421.      QuickFlag=1;
  422. }
  423.  
  424. /*-- Gotta Know the pasword ---*/
  425. if(Cmds->SysPass[0]!='\0' && !Stealth) {
  426.         sprintf(GSTR3,"%sPrivate",Sopt->NodeScreen);
  427.         if(!(stat=ChecktoDisplay(GSTR3,GSTR1,0,1)))
  428.             UnAvailNotice(GSTR1,GSTR3);
  429.         for(tries=1; tries<4; tries++) {
  430.               AEPutStr(SystemPrompt);
  431.             stat=LineInputConverted("",GSTR1,30,KEYBOARD_TIMEOUT);
  432.             if(stat<0) return(SLEEP_LOGOFF);
  433.  
  434.             if(Whence_The_Logon>=REMOTE_LOGON) {
  435.                 stat=CheckCarrier();
  436.                 if(stat==FALSE)            return(SLEEP_LOGOFF);
  437.             }
  438.  
  439.          stat=StringCompare(GSTR1,Cmds->SysPass);
  440.             if(stat==SUCCESS)    break;
  441.  
  442.             AEPutStr("Invalid PassWord\r\n");
  443.         }
  444.  
  445.         if(tries==4) {
  446.             (void)CallersLog("System Password Failure\n");
  447.             return(FAILURE);
  448.         }
  449.     }
  450.  
  451.  if(QuickFlag) goto Begining;    /* Skip Logon Screen */
  452. /*--- end 11w cycle screens --- */
  453. //(RTS)  Tue Jun 23 08:34:08 1992
  454.  /* show a default screen for low end users ?? */
  455.              sprintf(GSTR1,"%sBBSTitle",Sopt->NodeScreen);
  456.              ChecktoDisplay(GSTR1,GSTR3,0,0);
  457.  
  458. Begining:
  459. tries=0;
  460.  
  461.  if(ReservedName[0]!='\0') {
  462.         sprintf(GSTR1,"\r\n*** Node %d is reserved right now, for %s ***\r\n",Cmds->AcLvl[LVL_NODE_NUMBER],ReservedName);
  463.         AEPutStr(GSTR1);
  464.     }
  465. /*---------------LogonLoop-----------------------------------*/
  466. LogonLoop:
  467.  if(tries>=5)    {
  468.         AEPutStr("Too Many Errors, Goodbye!\r\n");
  469.         return(FAILURE);
  470.     }
  471.  
  472.  
  473.     /* Allow custom name_prompt string */
  474.  
  475.     AEPutStr("\r\nEnter your ");
  476.     if(!GetFromIconStr(NodeStr,"NAME_PROMPT",GSTR1))
  477.         {
  478.         AEPutStr("Name");
  479.         } else {
  480.         AEPutStr(GSTR1);
  481.         }
  482.     AEPutStr(" : ");
  483.  
  484.  
  485.  
  486.  NumHistItems=0;
  487.  WhichHist=0;
  488.  HistorySelect=0;
  489.  
  490.  stat=LineInput("",username,28,KEYBOARD_TIMEOUT/2);
  491.  if(stat<0) return(stat);
  492.  
  493.  if(Whence_The_Logon>=REMOTE_LOGON) {
  494.         stat=CheckCarrier();
  495.         if(stat==FALSE)        return(SLEEP_LOGOFF);
  496.     }
  497.  
  498.  if(strlen(username)==0) { tries+=1; goto LogonLoop; }
  499.  
  500.  UUCP=0;
  501.  strcpy(GSTR3,username);
  502.  GSTR3[5]='\0';
  503.  strupr(GSTR3);
  504.  strcpy(GSTR1,"UUCP.");
  505.  if(StringCompare(GSTR3,GSTR1)==SUCCESS)    {
  506.         UUCP=1;
  507.         strcpy(GSTR3,username+5);
  508.         strcpy(username,GSTR3);
  509.     } else    strcpy(GSTR3,username);
  510.  
  511.  stat=ChooseAName(GSTR3,&User,&User_keys,0);  /* go get this guys user info */
  512.  
  513.  if(stat<FAILURE)
  514.      return(stat);
  515.      SetEnvStat(ENV_ACCOUNTSEQ);
  516.  if(stat==FAILURE)    {
  517.         sprintf(GSTR1,"\r\nThe handle %s is not used on this BBS.\r\n",username);
  518.         AEPutStr(GSTR1);
  519.     //    sprintf(GSTR1,"\t  The handle %s is not used on this BBS.\n",username);
  520.      //CallersLog(GSTR1);   /* (RTS) save this to a file to see who tried to hacked in */
  521.  
  522.         AEPutStr("[R]etry your name or [C]ontinue as a new user? ");
  523.         stat=LineInput("",GSTR1,2,KEYBOARD_TIMEOUT/2);
  524.         if(stat<0)  return(stat);
  525.          
  526.         if(GSTR1[0]!='C'&&GSTR1[0]!='c') {
  527.             AEPutStr("\r\n");
  528.             tries+=1;
  529.             goto LogonLoop;
  530.         }
  531.          
  532.         stat=DoReserve(User.Name);
  533.         if(stat)        return(FAILURE);
  534.          ConvertAccess();
  535.         if(ReservedName[0]=='\0') {
  536.             stat=BaudTime(Online_Baud);
  537.             if(!stat)        return(FAILURE);
  538.         }
  539.  
  540.         if(Cmds->NEW_UserPW[0]!='\0') {
  541.             sprintf(GSTR2,"%sNewUserPW",Sopt->NodeScreen);
  542.             stat=ChecktoDisplay(GSTR2,GSTR3,0,1);
  543.  
  544.             AEPutStr("Enter New User Password: ");
  545.             stat=LineInputConverted("",GSTR3,30,KEYBOARD_TIMEOUT);
  546.             if(stat<0)  return(SLEEP_LOGOFF);
  547.             if(Whence_The_Logon>=REMOTE_LOGON)    {
  548.                 stat=CheckCarrier();
  549.                 if(stat==FALSE)     return(SLEEP_LOGOFF);
  550.             }
  551.  
  552.             stat=StringCompare(GSTR3,Cmds->NEW_UserPW);
  553.             if(stat!=SUCCESS) {
  554.                 tries+=1;
  555.                 AEPutStr("Invalid PassWord\r\n");
  556.                 goto LogonLoop;
  557.             }
  558.             AEPutStr("Correct\r\n");
  559.         }
  560.  
  561.         strcpy(User.Name,username);
  562.      /* Check for NoNewUsers at xxx Baud */
  563.         sprintf(GSTR1,"%sNoNewAt%d",Sopt->NodeScreen,Online_Baud);
  564.         if((f= Open(GSTR1,MODE_OLDFILE))) {
  565.             Close(f);
  566.             MenuSend(GSTR1);
  567.             Delay(360L);
  568.             goto LogoffEnd;
  569.         }
  570.      /* Check NoNewUsers at all */
  571.         sprintf(GSTR1,"%sNoNewUsers",Sopt->NodeScreen);
  572.         if((f= Open(GSTR1,MODE_OLDFILE))) {
  573.             Close(f);
  574.             MenuSend(GSTR1);
  575.             Delay(360L);
  576.             goto LogoffEnd;
  577.         }
  578.  
  579.         stat=New_Account_Sequence();
  580.         if(stat<=(-1))    return(stat);
  581.          SetEnvStat(ENV_LOGGINGON);
  582.          
  583.          (void)DisplayUserToCallersLog(0);
  584.          
  585.      return(SUCCESS);
  586.     }
  587.      SetEnvStat(ENV_LOGGINGON);
  588.       
  589. //(RTS) Tue Jun 23 08:36:43 1992
  590.  /*** Check list.. if user appears tell him to call the other node */
  591.  
  592.  /* load the Users account */
  593.  stat=Load_Account((int)User_keys.Number,&User,&User_keys);
  594.  if(stat==FAILURE) {
  595.         AEPutStr("That account has problems\r\n");
  596.         tries+=1;
  597.         goto LogonLoop;
  598.     }
  599.  
  600.  /*- Users accout was deleted --*/
  601.  if(User.Slot_Number==0)    {
  602.         AEPutStr("That account has been deleted.\r\n");
  603.         goto LogoffEnd;
  604.     }
  605. //(JOE) added here, removed from menu.c
  606. ConvertAccess();
  607.  
  608. Time_Last_On=User.Time_Last_On;
  609.  stat=DoReserve(User.Name);
  610.  if(stat)    return(FAILURE);
  611.  
  612.  if(ReservedName[0]=='\0') {
  613.         stat=BaudTime(Online_Baud);
  614.         if(!stat)    return(FAILURE);
  615.     }
  616.  
  617.  if(User.Sec_Status==0)    {        /* User is locked out the bbs */
  618.         sprintf(GSTR1,"%sLockout-0",Sopt->NodeScreen);
  619.         if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1))) {
  620.             UnAvailNotice(GSTR3,GSTR1);
  621.         }
  622.         goto LogoffEnd;
  623.     }
  624.  
  625.  if(User.Sec_Status==1) {
  626.         sprintf(GSTR1,"%sLockout-1",Sopt->NodeScreen);
  627.         if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
  628.             UnAvailNotice(GSTR3,GSTR1);
  629.  
  630.         goto LogoffEnd;
  631.     }
  632.  
  633.  /*** gotta update current info before going to CheckUSerOnline */
  634.  
  635.  User_keys.baud_rate = Online_Baud;
  636.  
  637.  StatPrintUser(&User);
  638.  
  639.  ConvertAccess();
  640.  stat=CheckUserOnLine(&User,1);
  641.  if(!stat) {
  642.         CallersLog("User already on another node!\n");
  643.         sprintf(GSTR1,"%sOnlyOnOneNode",Cmds->BBSLoc);
  644.         if(!(stat=ChecktoDisplay(GSTR1,GSTR3,0,1)))
  645.             AEPutStr("You are already logged into another node!\r\n");
  646.         goto LogoffEnd;
  647.     }
  648.      
  649.  FOREVER    {
  650.          
  651.         (void)DisplayUserToCallersLog(0);
  652.          
  653.         tries=0;
  654.         do {
  655.             if(tries>2)
  656.             {
  657.             AEPutStr("\r\nExcessive Password Failure\r\n");
  658.             sprintf(GSTR1,"%sCommands/syscmd/",Cmds->BBSLoc);
  659.             strcpy(GSTR2,"PWFAIL");
  660.             CustomCommand(GSTR1,GSTR2,1);
  661.             goto LogoffErr;
  662.             }
  663.  
  664.  
  665.         if(Whence_The_Logon==LOCAL_LOGON)
  666.             {
  667.             stat=SUCCESS;    // LOCAL_SYSOP PASSWORD OVERRIDE..
  668.             } else {
  669.  
  670.             /* read users password, decrypt it...  */
  671.  
  672.             AEPutStr("PassWord: ");
  673.             stat=LineInputConverted("",GSTR3,32,KEYBOARD_TIMEOUT);
  674.             if(stat<0) return(SLEEP_LOGOFF);
  675.             if(Whence_The_Logon>=REMOTE_LOGON)
  676.                 {
  677.                 stat=CheckCarrier();
  678.                 if(stat==FALSE) return(SLEEP_LOGOFF);
  679.                 }
  680.             strupr(GSTR3);
  681.             stat=AECryptCmp(GSTR3,User.PassKey); /* actual pw */
  682.             }
  683.  
  684.  
  685.         if(stat!=SUCCESS)
  686.             {
  687.             sprintf(GSTR2,"\tPassword Failure (%s)\n",GSTR3);
  688.             (void)CallersLog(GSTR2);
  689.             AEPutStr("Invalid PassWord\r\n");
  690.             ++tries;
  691.             }
  692.  
  693.         } while(stat!=SUCCESS);
  694. #ifdef RTS
  695.         sprintf(GSTR1,"%sPhoneCheck",Cmds->BBSLoc);
  696.         if(f=Open(GSTR1,MODE_OLDFILE)) {
  697.             Close(f);
  698.             tries=0;
  699.             do {
  700.                 if(tries>2)    {
  701.                     AEPutStr("\r\nExcessive PhoneNumber Failure\r\n");
  702.                     goto LogoffErr;
  703.                 }
  704.                 AEPutStr("Last 4 digits of your PhoneNumber: ");
  705.                 stat=LineInput("",GSTR3,4,KEYBOARD_TIMEOUT);
  706.                 if(stat<0)  return(SLEEP_LOGOFF);
  707.                 if(Whence_The_Logon>=REMOTE_LOGON) {
  708.                     stat=CheckCarrier();
  709.                     if(stat==FALSE) return(SLEEP_LOGOFF);
  710.                 }
  711.                 strcpy(GSTR1,User.PhoneNumber);
  712.                 if(strlen(GSTR1)>4)
  713.                     strcpy(GSTR1,GSTR1+(strlen(GSTR1)-4));
  714.  
  715.                 stat=StringCompare(GSTR3,GSTR1);
  716.                 if(stat!=SUCCESS) {
  717.                     sprintf(GSTR2,"\tPhoneNumber Failure (%s)\n",GSTR3);
  718.                     (void)CallersLog(GSTR2);
  719.                     AEPutStr("Invalid PhoneNumber\r\n");
  720.                     ++tries;
  721.                 }
  722.             } while(stat!=SUCCESS);
  723.         }
  724. #endif
  725.         StatPrintUser(&User);
  726. #ifdef RTS
  727.         if(UUCP) {
  728.             if(User.UUCPA) {
  729.                 ValidUser=3;
  730.                 ConPutStr("\r\nSystem dropping to UUCP...");
  731.                 CallersLog("\tReceiving UUCP feed\n");
  732.                 PurgeLineEnd();
  733.                 if(lfh=Open("NIL:",MODE_OLDFILE)) {
  734.                     sprintf(GSTR2,"uucico -D %s -U %u -Getty -7 -xx",Cmds->SerDev,Cmds->SerDevUnit);
  735.                     Execute(GSTR2,(DeBuG?0:lfh),(DeBuG?0:lfh));
  736.                     Close(lfh);
  737.                 }
  738.                 PurgeLineStart();
  739.                 DropDTR();
  740.                 return(FAILURE);
  741.             }
  742.             AEPutStr("UUCP access has been denied!\r\n\r\n");
  743.         }
  744. #endif
  745.      /* we made it here so we got a online real valid user */
  746.         ValidUser=1;
  747.         return(SUCCESS);
  748.     }
  749.  
  750.  LogoffErr:
  751.  (void)CallersLog("\t* Password Failure *\n");
  752.  
  753. LogoffEnd:
  754.  return(FAILURE);
  755. }
  756.  
  757. void Sysop_Account_Sequence(void)
  758. {
  759.  Load_Account(1,&User,&User_keys);
  760.       
  761. //(JOE) added here, removed from menu.c
  762. Time_Last_On=User.Time_Last_On;
  763.  StatPrintUser(&User);
  764. ConvertAccess();
  765.  DisplayUserToCallersLog(0);
  766. SetEnvStat(ENV_LOGGINGON);
  767.  
  768.  sprintf(GSTR1,"%sCommands/syscmd/",Cmds->BBSLoc);
  769.  strcpy(GSTR2,"ANSI");
  770.  CustomCommand(GSTR1,GSTR2,1);
  771.  
  772. }
  773.  
  774. void StartLog(char *stringout)
  775. {
  776.   FILE *GFP1;
  777. if(!Sopt->Toggles[3]) return;
  778. sprintf(LSTR,"%sNode%u/StartUpLog",Cmds->BBSLoc,Cmds->AcLvl[LVL_NODE_NUMBER]);
  779.  
  780. if(!TLock(LSTR)) GFP1=fopen(LSTR,"w"); else GFP1=fopen(LSTR,"a");
  781. /*
  782. GFP1=fopen(LSTR,"r");
  783. if(GFP1==NULL)
  784.     {
  785.     GFP1=fopen(LSTR,"w");
  786.     }
  787. else
  788.     {
  789.     fclose(GFP1);
  790.     GFP1=fopen(LSTR,"a");
  791.     }
  792. */
  793. if(GFP1)
  794.     {
  795.     fprintf(GFP1,stringout);
  796.     fclose(GFP1);
  797.     }
  798. }
  799.